import { TileLayerMethods, GetTileLayerEventFactory } from './base'

/**
 * `WMS` 属性对象
 */
export interface TileLayerWMSOptions {
    /**
     * 用 `','` 分隔的多个图层列表
     *
     * 默认值为 `‘’`
     */
    layers?: string;

    /**
     * 每个请求图层的用 `','` 分隔的描述样式
     *
     * 默认值为 `‘’`
     */
    styles?: string;

    /**
     * 输出图像的类型
     *
     * 默认值为 `‘image/png’`
     */
    format?: string;

    /**
     * 输出图像背景是否透明
     *
     * 默认值为 `false`
     */
    transparent?: boolean;

    /**
     * 请求服务的版本
     *
     * 默认值为 `‘1.1.1‘`
     */
    version?: string;

    /**
     * 地图投影类型
     *
     * 默认值为 `‘EPSG:900913‘`
     */
    srs?: string
}

/**
 * 自定义的 `WMS` 地图图块层事件工厂对象
 */
type TileLayerWMSFactory = GetTileLayerEventFactory<TileLayerWMS>

/**
 * 通过此类实现在地图上叠加自定义的 `WMS` 地图图块层
 */
export interface TileLayerWMS extends TileLayerMethods {
    readonly options: TileLayerWMSOptions;
    readonly FR: string;

    new (opts: TileLayerWMSOptions): TileLayerWMS;

    /**
     * 添加事件监听函数
     */
    addEventListener: <Event extends keyof TileLayerWMSFactory>(event: Event, handler: TileLayerWMSFactory[Event]) => void;

    /**
     * 移除事件监听函数
     */
    removeEventListener: <Event extends keyof TileLayerWMSFactory>(event: Event, handler: TileLayerWMSFactory[Event]) => void
}
